#include "hspdsc.as" title "DirectShow キャプチャデバイス表示 サンプル(1つのみ) " cls 4 dsc_Init // 初期化を必ずする! // バッファのサイズ取得し sdim で 確保 sdim devlist, dsc_GetDeviceListSize() dsc_GetDeviceList devlist // 利用可能なデバイス一覧取得 if stat = 0 : dialog "デバイスが見つかりません" : end objsize 300, 20 combox id, 100, devlist objsize 150,20 button "デバイスを再生",*play button "デバイスを停止",*_stop button "プロパティを表示",*prop button "解像度プロパティを表示",*prop2 button "プロパティ表示(自前)",*prop3 button "キャプチャして表示",*capture button "BMPで保存して表示",*savebmp button "終了する",*exit stop *play // 操作ID 0 指定(デフォルトでは0が指定されているため書かなくてもOK) dsc_SetActiveSel 0 // デバイスのオープン dsc_Open id, 0, 0, 0, 0 if stat < 0 : dialog "エラーが発生しました\nstat = " + stat, 1, "DEVICE-ERROR" : stop gsel 0, 1 // デバイスの再生 dsc_Play hwnd, 160, 120, 320, 240 if stat < 0 : dialog "エラーが発生しました\nstat = " + stat,1,"CAPTURE-ERROR" : stop stop *_stop // デバイスのクローズ dsc_Close if stat < 0 : dialog "エラーが発生しました\nstat = " + stat, 1, "CLOSE-ERROR" : stop stop *prop // デバイスのフィルタプロパティ表示 再生中でないと失敗します。 dsc_FilterProp hwnd, "Device Filter" if stat < 0 : dialog "エラーが発生しました\nstat = " + stat, 1, "FILTER-ERROR" : stop stop *prop2 // dsc_playを使う前でないとうまく実行できない為、再生中の場合は一度リセットする。 dsc_Close // クローズする if stat < 0 : dialog "エラーが発生しました\nstat = " + stat, 1, "CLOSE-ERROR" : stop dsc_Open id, 0, 0, 0, 0 // 再度オープン if stat < 0 : dialog "エラーが発生しました\nstat = " + stat, 1, "DEVICE-ERROR" : stop gsel 0,1 dsc_DevPinProp hwnd // プロパティを表示 dsc_Play hwnd, 160, 120, 320, 240 // 再び再生 if stat < 0 : dialog "エラーが発生しました\nstat = " + stat,1,"CAPTURE-ERROR" : stop stop *capture // ウィンドウ用意 screen 1, dsc_CapX, dsc_CapY // キャプチャ dsc_GetImage hdc, 0, 0, dsc_CapX, dsc_CapY if stat < 0 : dialog "エラーが発生しました\nstat = " + stat,1,"CAPTURE-ERROR" : stop redraw 1 // これは必ず必要です。 gsel 0, 1 stop *savebmp // BMPで保存 dsc_SaveBMP "test.bmp" if stat < 0 : dialog "エラーが発生しました\nstat = " + stat,1,"CAPTURE-ERROR" : stop screen 1, 32, 32 picload "test.bmp" gsel 0, 1 stop *exit // クローズ dsc_Stop dsc_Close end *prop3 //サイズとFourCCを取得します dialog "サイズ:"+dsc_CapX+"x"+dsc_CapY+"\nFourCC:"+dsc_FourCC+"\n"+strf("%2.2ffps",double((1.0 * 10 * 1000 * 1000) / dsc_AvgFrame)) stop